package Pakke;



import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

/**
 * FancyTimerIO.java
 * @author maria
 *
 * Klassen lager mappe i brukerens home/users mappe som kalles timer.
 * I denne mappen skal det opprettes en .ser fil som inneholder alle objekter
 * slik at innstillingene på programmet er lagret etter at programmet er lukket.
 *
 */

public class FancyTimerIO {
    private ArrayList<LTimerData> lTimerDataListe;
    private ArrayList<LNotification> lVarslingListe;


    /**
     *
     */
    public FancyTimerIO() {
    }

    /**
     * Åpner for datastrøm mellom fila LTimerData.ser, leser og returnerer en ArrayList av LTimerData-objekter
     * @return Returnerer ArrayList av TimerData-Objekter
     * @throws Exception
     * @see LTimerData
     */
    public ArrayList<LTimerData> loadLTimerData() throws Exception {
        String filnavn = getDir()+"LTimerData.ser";
        FileInputStream instream = new FileInputStream(filnavn);
        ObjectInputStream in = new ObjectInputStream(instream);
        lTimerDataListe = (ArrayList<LTimerData>)in.readObject();
        in.close();
        return lTimerDataListe;
    }

   
    /**
     * Åpner for datastrøm mellom fila LVarsling.ser, leser og returnerer en ArrayList av LNotification-objekter
     * @return ArrayList av varslinger
     * @throws Exception
     */
    public ArrayList<LNotification> loadLVarsling() throws Exception {
        String filnavn = getDir()+"LVarsling.ser";
        FileInputStream instream = new FileInputStream(filnavn);
        ObjectInputStream in = new ObjectInputStream(instream);
        lVarslingListe = (ArrayList<LNotification>)in.readObject();
        return lVarslingListe;

    }

    /**
     * Skriver en ArrayList av LTimerData-objekter (timere) til LTimerData.ser
     * @param lTimerData
     * @return
     */
    public boolean saveLTimerData(ArrayList<LTimerData> lTimerData) {

        String filnavn = getDir()+"LTimerData.ser";
        try {
            FileOutputStream outstream = new FileOutputStream(filnavn);     //
            ObjectOutputStream out = new ObjectOutputStream(outstream);
            out.writeObject(lTimerData);
            out.close();
            return true;
        } catch(IOException e) {
            System.out.println(e.getMessage());
        }
        return false;
    }

    /**
     * Skriver en ArrayLsit av LNotifications (varslinger) til LVarsling.ser.
     * @param lVarsling ArrayList
     * @return true eller false, true dersom skriving av varslinger til .ser-fil går bra
     */
    public boolean saveLVarsling(ArrayList<LNotification> lVarsling) {
        String filnavn = getDir() + "LVarsling.ser";
        try {
            FileOutputStream outstream = new FileOutputStream(filnavn);     //
            ObjectOutputStream out = new ObjectOutputStream(outstream);
            out.writeObject(lVarsling);
            return true;
        } catch(IOException e) {
        }
        return false;

    }

    

    /**
     * Returnerer mappen der vi skal lagre filene, ettersom hvilket opsys man bruker.
     * @return
     */
    public String getDir() {
        makeDir();
        String directory = getHomeDir();
        if(isWindows()) {
            directory += "\\timer\\";
        } else {
            directory +="/.timer/";
        }
        return directory;
    }

   /**
    * Lager en mappe "timer" under hjemmemappa
    * Her skal filene våre lagres
    */
    public void makeDir() {
        File fil;
        if(isWindows()) {
            fil = new File(getHomeDir()+"\\timer");
        } else {
            fil = new File(getHomeDir() + "/.timer");
        }
        fil.mkdir();
    }

    /**
     * Metoden returnerer hjemmemappa, ettersom hvilet opsys som brukes.
     * I denne mappa skal vi lage en ny mappe (vha makeDir()) der filer skal lagres
     *
     * @return
     */
    public String getHomeDir() {
        String mappe = System.getProperty("user.home").toLowerCase();
        if(isWindows()) {
            return mappe + "\\Application Data";
        } else {
            return mappe;
        }
    }

    /**
     *
     * @return true hvis opsys er windows
     */
    public boolean isWindows() {
        String os = System.getProperty("os.name").toLowerCase();  //returnerer navn på os, samt versjon
        return (os.indexOf("win") >= 0);        //true eller false ettersom returverdi
    }

    /**
     *
     * @return true hvis opsys er osx
     */
    public boolean isMac() {
        String os = System.getProperty("os.name").toLowerCase();  //returnerer navn på os, samt versjon
        return(os.indexOf("mac") >= 0);
    }

    /**
     *
     * @return true, hvis opsys er unix
     */
    public boolean isUnix() {
        String os = System.getProperty("os.name").toLowerCase();  //returnerer navn på os, samt versjon
        return (os.indexOf( "nix") >=0 || os.indexOf( "nux") >=0);
    }
}

